/*  
	Project: 	Adds Fullscreen Controls to the Context Menu
	
	Original Code from: http://drawlogic.com/2007/06/12/howto-using-the-contextmenu-in-as3-with-fullscreen-mode-as-a-sample/
	
	I just packaged it inside it's own class to allow for one line of code setup and on import statement
	
	Copyright (C) 2009, Jerome Maurey-Delaunay, all rights reserved.
	contact jerome(at)wemakedotcoms.com
	
	
	Legal crap I see in most open source project (and makes this look official):
	Redistribution and use in source and binary forms, with or without modification,
	are permitted provided that the following conditions are met:
	
	  * Redistribution's of source code must retain the above copyright notice,
		this list of conditions and the following disclaimer.
	
	  * Redistribution's in binary form must reproduce the above copyright notice,
		this list of conditions and the following disclaimer in the documentation
		and/or other materials provided with the distribution.
	
	This software is provided by the copyright holders and contributors "as is" and
	any express or implied warranties, including, but not limited to, the implied
	warranties of merchantability and fitness for a particular purpose are disclaimed.
	In no event shall I or contributors be liable for any direct,
	indirect, incidental, special, exemplary, or consequential damages
	(including, but not limited to, procurement of substitute goods or services;
	loss of use, data, or profits; or business interruption) however caused
	and on any theory of liability, whether in contract, strict liability,
	or tort (including negligence or otherwise) arising in any way out of
	the use of this software, even if advised of the possibility of such damage.
*/



package com.wemakedotcoms.contextMenu
{
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.display.StageDisplayState;
	import flash.events.ContextMenuEvent;
	import flash.ui.ContextMenu;
	import flash.ui.ContextMenuItem;
	
	public class FullScreenContextMenu
	{
		
		private static var STAGE:Stage;
		
		private static var TARGET:Sprite;
		
		public function FullScreenContextMenu(target:Sprite, cm:ContextMenu = null)
		{
			
			STAGE = target.stage;
			TARGET = target;
			
			initFSContextMenu(cm);
			
        }
        
        private function initFSContextMenu(cm:ContextMenu = null):void
        {
        	var fullscreenCM:ContextMenu;
        	
        	// Editing the Context Menu
			if(cm) fullscreenCM = cm;
			else fullscreenCM = new ContextMenu();
			
			fullscreenCM.addEventListener(ContextMenuEvent.MENU_SELECT, onContextMenuHandler);
			fullscreenCM.hideBuiltInItems();
			// add the full screen item
			var fs:ContextMenuItem = new ContextMenuItem("Enter Full Screen" );
			fs.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, onShowFullScreen);
			fullscreenCM.customItems.push( fs );
			// add the 'back to normal size' option
			var xfs:ContextMenuItem = new ContextMenuItem("Exit Full Screen");
			xfs.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, onShowNormalScreen);
			fullscreenCM.customItems.push( xfs );
			
			TARGET.contextMenu = fullscreenCM;
        }
        
        private function onShowFullScreen(event:ContextMenuEvent):void
		{
			// Go Full Screen Option Selected
			STAGE.displayState = StageDisplayState.FULL_SCREEN;
		}

		private function onShowNormalScreen(event:ContextMenuEvent):void
		{
			// Exit Full Screen Option Selected
			STAGE.displayState = StageDisplayState.NORMAL;
		}

		private function onContextMenuHandler(event:ContextMenuEvent):void
		{
			// Enable and disable the context menu items based on what mode we are in.
			
			if (STAGE.displayState == StageDisplayState.NORMAL)
			{
				event.target.customItems[0].enabled = true; // show full screen button
				event.target.customItems[1].enabled = false; // hide normal screen button
			}
			else
			{
				event.target.customItems[0].enabled = false; // hide full screen button
				event.target.customItems[1].enabled = true; // shoe normal screen button
			}
		}

	}
}